export function myPromise(options) {
	return new Promise((resolve, reject) => {
		ajax({
			method: options.method,
			url: options.url,
			data: options.data,
			success: function (result) {
				resolve(result)
			},
			fail: function (error) {
				reject(error)
			},
		})
	})
}

export function ajax(options) {
	// 1. 创建XMLHttpRequest
	let xhr = new XMLHttpRequest()
	let param = formateParam(options.data) // name=jack&age=18
	let method = options.method.toUpperCase()
	// 2. 建立连接
	if (method == 'GET') {
		xhr.open(options.method, options.url + '?' + param)
		// 3. 发送请求
		xhr.send()
	} else if (method == 'POST') {
		xhr.open(options.method, options.url)
		// xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
		xhr.setRequestHeader('content-type', 'multipart/form-data')
		xhr.send(param)
	}

	// 4. 接收响应数据
	xhr.onreadystatechange = function () {
		// 4.1 是否响应完成
		if (xhr.readyState === 4) {
			// 4.2 是否成功响应
			if (xhr.status === 200) {
				let data = xhr.responseText // 响应内容
				data = JSON.parse(data)
				options.success(data)
			} else {
				alert('网络出错 ' + xhr.status)
			}
		}
	}
}

/**
 * 格式化参数
 *  {name:'jack',age:18}  =>  name=jack&age=18
 *   遍历对象，属性转换成名称=值形式，存储到数组, 再将数组元素用&符号拼接join('&)
 *    ['name=jack','age=18']  ->
 */
function formateParam(obj) {
	let arr = []
	for (const key in obj) {
		let item = `${key}=${obj[key]}` // name=jack   age=18
		arr.push(item) // ['name=jack','age=18;]
	}
	return arr.join('&') // name=jack&age=18
}

